CDEC Class

CDEC is a wrapper class for the DECIMAL data type. Holds signed 128-bit (16-byte) values representing 96-bit (12-byte) integer numbers scaled by a variable power of 10. The scaling factor specifies the number of digits to the right of the decimal point; it ranges from 0 through 28. With a scale of 0 (no decimal places), the largest possible value is +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28). With 28 decimal places, the largest value is +/-7.9228162514264337593543950335, and the smallest nonzero value is +/-0.0000000000000000000000000001 (+/-1E-28).

In this implementation the scale is dynamic, dictated by the number of decimal places.

DIM dec AS CDEC = 12345.12
print dec   ' = 12345,12
print "scale: ", dec.m_dec.scale  ' --> scale = 2
dec += dec + 11.1111
print dec   ' = 24701,3511
print "new scale: ", dec.m_dec.scale  ' --> scale = 4

Constructors

Creates a new instance of the CDEC class and assigns the values passed to it.

CONSTRUCTOR CDec
CONSTRUCTOR CDec (BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYREF cSrc AS CDec, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYREF decSrc AS DECIMAL, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL cySrc AS CURRENCY, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYREF cur AS CCUR, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL bSrc AS BYTE, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL ubSrc AS UBYTE, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL sSrc AS SHORT, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL usSrc AS USHORT, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL lSrc AS LONG, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL ulSrc AS ULONG, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL nInteger AS LONGINT, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL nUInteger AS ULONGINT, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL fSrc AS SINGLE, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL dSrc AS DOUBLE, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYREF wszSrc AS WSTRING, BYVAL lcid AS LCID = 0, BYVAL dwFlags AS ULONG = 0)
CONSTRUCTOR CDec (BYVAL pDispSrc AS IDispatch PTR, BYVAL lcid AS LCID = 0)
CONSTRUCTOR CDec (BYVAL varSrc AS VARIANT, BYVAL lcid AS LCID = 0)

Remarks

As the bigger numeric variable supported by FreeBasic is a long integer, if we want to set bigger values we need to use strings, e.g.

DIM dec AS CDEC = "-79228162514264337593543950.335"

--or--

DIM dec AS CDEC = "-79,228,162,514,264,337,593,543,950.335"

By default, the locale user identifier is used. Therefore, in my Spanish computer I need to use "," as the decimal separator and "." as the thousands separator.

DIM dec AS CDEC = "-79.228.162.514.264.337.593.543.950,335"

But it can be overriden by passing an LCID value (1033 for US).

DIM dec AS CDEC = CDEC("-79,228,162,514,264,337,593,543,950.335", 1033)

Operators

Name Description
Operator LET Assigns a value to a CDEC variable.
CAST operators Converts a CDEC into another data type.
Operator * Returns the address of the underlying CURRENCY structure.
Comparison operators Compares decimal numbers.
Math operators Add, subtract, multiply or divide decimal numbers.

Methods

Name Description
DecAbs Returns the absolute value of a decimal data type.
DecFix Returns integer portion of a decimal data type.
DecInt Returns integer portion of a decimal data type.
DecRound Rounds the DECIMAL to a specified number of decimal places.
IsSigned Returns true if this number is signed or false otherwise.
IsUnsigned Returns true if this number is unsigned or false otherwise.
Scale Returns the scale of the DECIMAL number.
Sign Returns 0 if it is not signed of &h80 (128) if it is signed.
ToVar Returns the currency as a VT_CY variant.

Operator LET (=)

Assigns a value to a CDEC variable.

OPERATOR LET (BYREF cSrc AS CDec)

Examples

DIM c AS CDEC
c = 123
c = 12345.1234

CAST Operators

Converts a CDEC into another data type.

OPERATOR CAST () AS CURRENCY
OPERATOR CAST () AS VARIANT
OPERATOR CAST () AS STRING

Remarks

These operators aren't called directly, They perform the conversion when the target is not a CDEC variable.

Operator *

Returns the address of the underlying DECIMAL structure.

OPERATOR * (BYREF dec AS CDEC) AS DECIMAL PTR

Comparison operators

OPERATOR = (BYREF dec1 AS CDEC, BYREF dec2 AS CDEC) AS BOOLEAN
OPERATOR <> (BYREF dec1 AS CDEC, BYREF dec2 AS CDEC) AS BOOLEAN
OPERATOR < (BYREF dec1 AS CDEC, BYREF dec2 AS CDEC) AS BOOLEAN
OPERATOR > (BYREF dec1 AS CDEC, BYREF dec2 AS CDEC) AS BOOLEAN
OPERATOR <= (BYREF dec1 AS CDEC, BYREF dec2 AS CDEC) AS BOOLEAN
OPERATOR >= (BYREF dec1 AS CDEC, BYREF dec2 AS CDEC) AS BOOLEAN

Math operators

OPERATOR + (BYREF dec1 AS CDEC, BYREF dec2 AS CDEC) AS CDEC
OPERATOR += (BYREF dec AS CDEC)
OPERATOR - (BYREF dec1 AS CDEC, BYREF dec2 AS CDEC) AS CDEC
OPERATOR -= (BYREF dec AS CDEC)
OPERATOR * (BYREF dec1 AS CDEC, BYREF dec2 AS CDEC) AS CDEC
OPERATOR *= (BYREF dec AS CDEC)
OPERATOR / (BYREF dec AS CDEC, BYVAL cOperand AS CDEC) AS CDEC
OPERATOR /= (BYREF cOperand AS CDEC)

Examples

DIM dec AS CDEC = 12345.1234
dec = dec + 111.11
dec = dec - 111.11
dec = dec * 2
dec = dec / 2
dec += 123
dec -= 123
dec *= 2.3
dec /= 2.3

Remarks

The version OPERATOR - (BYREF dec AS CDEC) AS CDEC changes the sign of a decimal number.

DIM dec AS CDEC = 123
dec = -dec

Other FreeBasic operators such AND, MOD, OR, SHL and SHR can also be used with CDEC variables, e.g. c = c AND 1, c = c MOD 5, etc.

DecAbs

Returns the absolute value of a decimal data type.

FUNCTION DecAbs () AS CDEC

DecFix

Returns integer portion of a decimal data type. If the value is negative, then the first negative integer greater than or equal to the value is returned.

FUNCTION DecFix () AS CDEC

DecInt

Returns integer portion of a decimal data type. If the value is negative, then the first negative integer less than or equal to the value is returned.

FUNCTION DecInt () AS CDEC

DecRound

Rounds the DECIMAL to a specified number of decimal places.

FUNCTION DecRound () AS CDEC

IsSigned

Returns true if this number is signed or false otherwise.

FUNCTION IsSigned () AS BOOLEAN

IsUnsigned

Returns true if this number is unsigned or false otherwise.

FUNCTION IsUnsigned () AS BOOLEAN

Scale

Returns the scale of the DECIMAL number.

FUNCTION Scale () AS UBYTE

Sign

Returns 0 if it is not signed of &h80 (128) if it is signed.

FUNCTION Sign () AS UBYTE

ToVar

Returns the DECIMAL as a VT_DECIMAL variant.

FUNCTION ToVar () AS VARIANT

Remarks

Can be used to assign a currency directly to a CVAR variable.

DIM dec AS CDEC = 12345.1234
DIM cv AS CVAR = dec.ToVar